//庆功会 转化为01背包,没有采用二进制优化
#include <iostream>
using namespace std;
const int MAXN=500;
const int MAXM=6000;
int n,m;
int w[MAXN+1],c[MAXN+1],s[MAXN+1];//价格，价值，数量 
int maxc[MAXM+1];//maxc[v]拔款为v取得的最大价值

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>w[i]>>c[i]>>s[i];

    for(int i=1;i<=n;i++){ //将第i个物品拆解为s[i]个价格是c[i]的物品
        for(int k=1;k<=s[i];k++){
            for(int v=m;v>=w[i];v--){
                    maxc[v]=max(maxc[v],maxc[v-w[i]]+c[i]);
            }
        } 
    }
    cout<<maxc[m];
}